<?php

class AdminTextosController extends Zend_Controller_Action 
{ 
	
	private $usuario;
	private $textosDAO;
	private $imagensDAO;
	private $turmasDAO;
	
	
	protected $_acl;
	protected $_session;
	
	
	
	public function init() {
		$config = Zend_Registry::get ( 'config' );
		$this->_acl = $this->getFrontController()->getParam('acl');
		$this->_session = new Zend_Session_Namespace ( $config->session->namespace );
		$this->usuario = $this->_session->storage;
		$this->textosDAO = new Textos();
		$this->imagensDAO = new Imagens();
		$this->turmasDAO = new Turmas();
		$this->view->aba = 'admintextos';	
		if ( isset ( $this->usuario )) {
			$this->view->perfil = $this->usuario->perfil;
		}
	}
	
	public function preDispatch() {
	 if (!Zend_Auth::getInstance()->hasIdentity()) {
      	$this->view->logado = 0;
      	$this->_redirect('/login');
      } else {
      	$config = Zend_Registry::get ( 'config' );
      	$this->_session = new Zend_Session_Namespace ( $config->session->namespace );
		$this->_usuario = $this->_session->storage;
       	$this->view->logado = 1;
      }
	}
	
	public function indexAction() {
		
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		$busca = $params->busca;
	
				

		if ($this->_acl->isAllowed ( $this->usuario->perfil, 'textos', 'ver' )) {
			
			if ($this->_acl->isAllowed ( $this->usuario->perfil, 'textos', 'administrar' )) {

				if ($busca) 
					$textos = $this->textosDAO->search($busca);
				 elseif($params->filtro && $params->ordem){
				 	$filtro = $params->filtro;
				 	$ordem = $params->ordem;
					$textos = $this->textosDAO->findByFiltro($filtro, $ordem);
				 }
				 else
				 	$textos = $this->textosDAO->findByFiltro('data', 'desc');
				 
							
			} else {
				
				if ($busca) 
					$textos = $this->textosDAO->search($busca);
				 elseif($params->filtro && $params->ordem){  
					//$textos = $this->textosDAO->findByUsuario($this->usuario->id,'id desc');
					$filtro = $params->filtro;
					$ordem = $params->ordem;
					$textos = $this->textosDAO->findByUsuario($this->usuario->id, $filtro,$ordem);
																		
					
				 }
				 else{
				 	$textos = $this->textosDAO->findByUsuario($this->usuario->id, 'titulo', 'asc');
				 	$ordem = 'asc';
				 }
			}
			
			$this->view->busca = $busca;
			$this->view->textos = $textos;
			
			if(isset($ordem))
				$this->view->ordem = $ordem;
			
			$paginator = Zend_Paginator::factory($textos);
			
			$paginator->setItemCountPerPage(10);
			$page = $this->_getParam('page');
			
			if ($page)
				$paginator->setCurrentPageNumber($this->_getParam('page'));
				
			$paginator->setPageRange(range(1,10));
			Zend_View_Helper_PaginationControl::setDefaultViewPartial("_partials/paginacao.phtml");
			
			$this->view->paginator = $paginator;

			$this->view->perfil = $this->usuario->perfil;
		
		} else {
			$this->_redirect ( './' ); //Disparar erro de acesso negado
		}
	}
	
	public function inserirAction() {
		$this->view->acao = 'cadastrar';
		$this->view->areas = $this->getFormAreas();
		$this->view->grupos = $this->getFormGrupos();
		$this->view->aba = 'inserirtexto';
		$this->render('formulario');
	}
	
	
	public function editarAction() {
		$this->view->acao = 'editar';
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		
		$texto = $this->textosDAO->find($params->id)->current();
		
		$this->view->areas = $this->getFormAreas($texto);
		$this->view->grupos = $this->getFormGrupos();
		$tags = array();
		$TagsTexto =  $texto->findTagsTextosByTexto();
		foreach($TagsTexto as $t) 
			$tags[] = $t->tag;		
		if (count($tags)) $this->view->tags = implode(", ",$tags);
		$this->view->texto = $texto;
		
		$this->render('formulario');
	}

	public function getFormAreas($texto='') {
		$valores = array ( );
		if ($texto) {
			foreach ( $texto->findAreasViaAreasTextosByTexto () as $t )
				$valores [] = $t->id;
		}
		
		$areasDAO = new Areas();
		$formAreas = new Zend_Form_Element_MultiCheckbox('areas');
		$formAreas->setDecorators(array(
     	'Description',
		'ViewHelper',
   		array('HtmlTag', array('tag' => '<span>')),
    	array('Label', array('tag' => '<span>')),
		));
		foreach($areasDAO->fetchAll() as $a) 
			$formAreas->addMultiOptions(array($a->id => " ".html_entity_decode($a->nome)));
		$formAreas->setLabel ( utf8_decode("Áreas de Conhecimento:") )
		->setAttrib('class', 'areas')
		->setRequired ( true )
		->setValue($valores);
		return $formAreas;
	}
	
	public function getFormGrupos($texto='') {
		$valores = array ( );
		if ($texto) {
			foreach ( $texto->findTextoByGrupo() as $t )
				$valores [] = $t->id;
		}
		
		$gruposDAO = new Grupos();
		$formGrupos = new Zend_Form_Element_Select('grupo');
		$formGrupos->setDecorators(array(
     	'Description',
		'ViewHelper',
    	array('HtmlTag', array('tag' => '<span>')),
    	array('Label', array('tag' => '<label>')),
		));
		foreach($gruposDAO->findByUsuario($this->usuario->id) as $a) { 
			$formGrupos->addMultiOptions(array($a->id => " ".$a->nome));
		}
		$formGrupos->setLabel ( "Grupo: " )
		->setRequired ( true )
		->setValue($valores);
		return $formGrupos;
	}
	
	
	public function salvarAction() {
		
		if (! $this->getRequest ()->isPost ()) {
			return $this->_forward ( 'index' );
		}
		
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		
		$validatorTit = new Zend_Validate();
		$validatorTit->addValidator(new Valida_NaoVazio("titulo"));
 		
		
		
		$validatorTex = new Zend_Validate();
		$validatorTex->addValidator(new Valida_NaoVazio("texto"));
				
		if ( !$validatorTit->isValid($params->titulo) || !$validatorTex->isValid($params->texto)) {
			print_r($validatorTit->getMessages());
			print_r($validatorTex->getMessages());
			
			exit();
			/* @todo Error handle */
		}
		
		$dados = array(
		'id' => $params->id,
		'titulo' => $params->titulo,
		'descricao' => $params->descricao,
		'texto' => html_entity_decode($this->view->Nl2br($params->texto)),
		'data' => Zend_Date::now()->toString("Y-M-d H:m:s"),
		'id_usuario' => $this->usuario->id,
		'tags' => trim($params->tags),
		'areas' => $params->areas,
		'id_grupo' => 1
		);
	
		if ($params->id){  
			$this->textosDAO->update($dados, "id = $params->id");
			$this->view->acao = 'editar';	
		}
		else{
			
			$params->id = $this->textosDAO->insert($dados);		
		}

		$texto = $this->textosDAO->find($params->id)->current();
		$this->view->texto = $texto; 
		$imgs = $this->imagensDAO->fetchAll("id_texto = $params->id");
		$contador = count($imgs);
		$this->view->contador = $contador;
		$this->view->imgs = $imgs;
		
		if($this->view->acao == 'editar'){
			$this->view->acao = 'editar';
			$this->view->aba = 'admintextos';
		}
		else{
			$this->view->acao = 'inserir';
			$this->view->aba = 'inserirtexto';
		}
		//$this->render('imagens');	
		$this->_redirect('admintextos');
		
	}
	
	public function apagarAction() {
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		$imgs = $this->imagensDAO->fetchAll("id_texto = $params->id");
		
		foreach ($imgs as $images){
			$this->imagensDAO->delete($images->id);
			
			if(file_exists($images->nome_imagem)) 
			unlink($images->nome_imagem);
		}
		$this->textosDAO->delete($params->id);
		$this->_redirect("admintextos");
	}
	
	public function editarimgAction() {
		
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		
		$imgs = $this->imagensDAO->fetchAll("id_texto = $params->id");
		$contador = count($imgs);
		$this->view->contador = $contador;
		$this->view->imgs = $imgs;
		
		$texto = $this->textosDAO->find($params->id)->current();
		$this->view->texto = $texto; 
		$this->view->acao = 'editar';
		$this->view->aba = 'admintexto';
		$this->render('imagens');
	}
	
	
	public function salvarimgAction(){
	
		if (! $this->getRequest ()->isPost ()) {
				return $this->_forward ( 'index' );
		}
		
		$pasta_dir = "imagens/"; //diretorio no servidor dos arquivos
			
		
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
			
			//se nao existir a pasta ele cria uma
			if(!file_exists($pasta_dir)){
				mkdir($pasta_dir);
			}
			$texto = $this->textosDAO->find($params->id)->current();
			
			$rowSet = $this->imagensDAO->fetchAll("id_texto = $params->id");
			$contador = count($rowSet);
			
			$arquivo = $_FILES['imagem'];
			$contador++;
			if($contador <= 6){
				
				if($arquivo['type'] =="image/jpeg" || $arquivo['type'] =="image/pjpeg" || $arquivo['type'] =="image/png"){
			
				
					$set_imgs = $this->imagensDAO->fetchAll();
					$contadorAll = count($set_imgs);
					if($contadorAll > 1){
						$contadorAll--;
						$set_imgs->seek($contadorAll);
					}
					else $contadorAll++;
											
					
					$img_corrente = $set_imgs->current();
					$id_img = $img_corrente->id;
					$id_img++;
					
					$arquivo_nome = $arquivo['name'];
					$arquivo_nome = strtolower(end(explode(".", $arquivo_nome)));
					
					//coloca o nome da imagem com id do texto com -, imagem e contador: 'idTexto-imagemcontador'
					$imagem_nome = $pasta_dir . $params->id ."-".$id_img.md5(uniqid(rand(),true)).".".$arquivo_nome;
			
					$arquivo = $_FILES['imagem'];
					// Faz o upload da imagem
					//guardando a imagem na pasta
					$resultado = move_uploaded_file($_FILES['imagem']['tmp_name'], $imagem_nome);
			
					$dados_imagem = array(
					'id' => $params->id_imagem,
					'nome_imagem' => $imagem_nome,
					'id_texto' => $texto->id
					);
					
					$params->id_imagem = $this->imagensDAO->insert($dados_imagem);
					
					
					
				}
			}
			if (isset($_POST['finalizar']) && $_POST['finalizar'] == "finalizar"){
				if($this->view->acao =='editar'){
					$this->render("formulario");
				}
				else
					$this->_redirect("admintextos");
			}
			else{ 
				$this->view->contador = $contador;
				$imgs = $this->imagensDAO->fetchAll("id_texto = $params->id"); 
				$this->view->imgs = $imgs;
				$this->view->acao = 'inserir';
				$this->view->aba = 'inserirtexto';
				$imagens = $this->imagensDAO->find($params->id_imagem)->current();
				$this->view->texto = $texto;
				$this->view->imagens = $imagens;
				$this->render('imagens');
			}
	
	}
	
	public function apagarimgAction() {
		
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		$imagem = $this->imagensDAO->find($params->id_img)->current();
		$nome_imagem = $imagem->nome_imagem;
		
		if(file_exists($nome_imagem)) 
			unlink($nome_imagem);
			
		$this->imagensDAO->delete($params->id_img);
		
		$texto = $this->textosDAO->find($params->id_text)->current();
		$this->view->texto = $texto;
		$imgs = $this->imagensDAO->fetchAll("id_texto = $params->id_text"); 
		$contador = count($imgs);
		$this->view->contador = $contador;
		$this->view->imgs = $imgs;
		$this->view->imagens = $imgs;
		$this->view->acao = 'editar';
		$this->view->aba = 'admintexto';
		$this->render("imagens");
	}

	public function editarturmasAction() {
		
		$params = new Zend_Filter_Input(null, null, $this->getRequest()->getParams());
		
		$turmas = $this->turmasDAO->fetchAll("id_professor = $this->usuario->id");
		$contador = count($imgs);
		$this->view->contador = $contador;
		$this->view->imgs = $imgs;
		
		$texto = $this->textosDAO->find($params->id)->current();
		$this->view->texto = $texto; 
		$this->view->acao = 'editar';
		$this->view->aba = 'admintexto';
		$this->render('imagens');
	}
	
	
}  